#pragma once
#include <string>
#include <vector>
#include "SurfaceExtractor.h"

/**
 * @brief VTK文件写入类
 * 
 * 用于将提取的界面数据写入VTK格式文件，支持：
 * 1. 非结构化网格（UnstructuredGrid）
 * 2. 点数据和单元数据
 * 3. 断层和地层界面的区分
 */
class VTKWriter {
public:
    /**
     * @brief 写入VTK文件
     * @param filename 输出文件路径
     * @param extractor 界面提取器对象
     */
    static void writeVTKFile(const std::string& filename, const SurfaceExtractor& extractor);

    /**
     * @brief 写入VTK文件头部
     * @param filename 输出文件路径
     * @param numPoints 点的数量
     * @param numCells 单元的数量
     */
    static void writeHeader(std::ofstream& file, size_t numPoints, size_t numCells);

    /**
     * @brief 写入点数据
     * @param file 文件流
     * @param vertices 顶点数据
     */
    static void writePoints(std::ofstream& file, const std::vector<Point3D>& vertices);

    /**
     * @brief 写入单元数据
     * @param file 文件流
     * @param triangles 三角形单元数据（断层）
     * @param faultQuads 断层四边形单元数据
     * @param strataQuads 地层四边形单元数据
     */
    static void writeCells(std::ofstream& file, 
                          const std::vector<Triangle>& triangles,
                          const std::vector<Quad>& faultQuads,
                          const std::vector<Quad>& strataQuads);

    /**
     * @brief 写入点属性数据
     * @param file 文件流
     * @param vertices 顶点数据
     */
    static void writePointData(std::ofstream& file, const std::vector<Point3D>& vertices);
}; 